Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF » EMF Model, Resource loading issue
EMF Model, Resource loading issue [message #1232233] Thu, 16 January 2014 13:37 Go to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello,

I'm experiencing an issue with my generated ecore model usage. I've generated an ecore model from a xsd file. Look at the following screenshot for xsd to ecore information.

index.php/fa/17263/0/

Now I'm trying to load the following xml file given from the webservice using this xsd schema.

<?xml version="1.0" encoding="UTF-8"?>
<wega xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="wsdl/com/test/wega/service/dataformat/dataformat.xsd">
	<version>1.0</version>
	<application>TestApp</application>
	<process>globe</process>
	<languageISOId>es</languageISOId>
	<countryISOId>EN</countryISOId>
	<group>
		<id>Version</id>
		<field>
			<id>Comment</id>
			<label>21-OKT-10 12.01.27.925895000 PM +01:00</label>
			<type>STRING</type>
			<mandatory>false</mandatory>
			<access>READ</access>
			<length>50</length>
		</field>
		<field>
			<id>MetaFieldOrder</id>
			<list>
				<key/>
				<value>2</value>
				<checked>true</checked>
			</list>
			<changed>false</changed>
			<label>HIDDEN FIELD</label>
			<infoText>FormRenderer sorting of elements.</infoText>
			<example/>
			<type>LIST</type>
			<mandatory>false</mandatory>
			<access>READ</access>
			<length>1</length>
			<multipleSelection>false</multipleSelection>
		</field>
	</group>
</wega>



If I'm trying to load this file I get the following exception:

org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'wega' not found. (file:///Users/test/dataformat.xml, 2, 137)
	at org.eclipse.emf.ecore.xmi.impl.XMLHandler.reportUnknownFeature(XMLHandler.java:1998)
	at org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleUnknownFeature(XMLHandler.java:1962)
	at org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleFeature(XMLHandler.java:1906)
	at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createDocumentRoot(XMLHandler.java:1464)
	at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createObjectByType(XMLHandler.java:1326)
	at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createTopObject(XMLHandler.java:1475)
	at org.eclipse.emf.ecore.xmi.impl.XMLHandler.processElement(XMLHandler.java:1026)
	at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:1008)
	at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:719)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:504)
	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:767)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1370)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1316)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3115)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:921)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:647)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:513)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:815)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:744)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:128)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1208)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:543)
	at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
	at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java:175)
	at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(XMLResourceImpl.java:253)
	at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1518)
	at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1297)
	at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:259)
	at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274)
	at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:406)
	at com.test.wega.service.data.presentation.DataEditor.createModel(DataEditor.java:850)
	at com.test.wega.service.data.presentation.DataEditor.createPages(DataEditor.java:906)
	at org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:348)
	at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:668)
	at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:464)
	at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:599)
	at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:310)
	at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:185)
	at Workerchain.design.stacks.ViewStackPresentation.selectPart(ViewStackPresentation.java:1025)
	at org.eclipse.rap.ui.interactiondesign.internal.ConfigurableStackProxy.selectPart(ConfigurableStackProxy.java:424)
	at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1262)
	at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1215)
	at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1614)
	at org.eclipse.ui.internal.PartStack.add(PartStack.java:508)
	at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:106)
	at org.eclipse.ui.internal.PartStack.add(PartStack.java:494)
	at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:115)
	at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:65)
	at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:225)
	at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:213)
	at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:775)
	at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:673)
	at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:633)
	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2855)
	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2763)
	at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2755)
	at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2706)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:66)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2702)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2686)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2669)
	at com.test.wega.service.data.presentation.DataformatEditorAdvisor.openEditor(DataformatEditorAdvisor.java:398)
	at Workerchain.operations.OpenDataFormatFileEditorOperation.run(OpenDataFormatFileEditorOperation.java:84)
	at Workerchain.treeVIew.MandantsViewPart$5.doubleClick(MandantsViewPart.java:213)
	at org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:828)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:52)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:177)
	at org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:826)
	at org.eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.java:1424)
	at org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java:1230)
	at org.eclipse.jface.util.OpenStrategy.fireDefaultSelectionEvent(OpenStrategy.java:242)
	at org.eclipse.jface.util.OpenStrategy.access$0(OpenStrategy.java:239)
	at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:304)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:85)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:699)
	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:601)
	at org.eclipse.swt.widgets.Display.executeNextEvent(Display.java:1208)
	at org.eclipse.swt.widgets.Display.runPendingMessages(Display.java:1189)
	at org.eclipse.swt.widgets.Display.safeReadAndDispatch(Display.java:1172)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1164)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2733)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2694)
	at org.eclipse.ui.internal.Workbench.access$5(Workbench.java:2530)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:701)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:684)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:157)
	at Workerchain.presentation.WorkerchainEditorAdvisor$Application.start(WorkerchainEditorAdvisor.java:85)
	at org.eclipse.rap.ui.internal.application.EntryPointApplicationWrapper.createUI(EntryPointApplicationWrapper.java:38)
	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWTLifeCycle.java:186)
	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle$UIThreadController.run(RWTLifeCycle.java:298)
	at java.lang.Thread.run(Thread.java:695)
	at org.eclipse.rap.rwt.internal.lifecycle.UIThread.run(UIThread.java:104)


Can anyone help me out? Can't figure out what's wrong. I know the document root element has a different name, but the webservice can marhall/unmarshal these files without problems.

Greetings,
Sascha

[Updated on: Thu, 16 January 2014 13:38]

Report message to a moderator

Re: EMF Model, Resource loading issue [message #1233674 is a reply to message #1232233] Mon, 20 January 2014 09:00 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Ok, I've tried to generate a custom xsd schema for my given xml. Generated a new ecore model and editor from this xsd and tried to load the xml into the editor. But I get the same error like before. Sad

Greetings,
Sascha

[Updated on: Mon, 20 January 2014 09:00]

Report message to a moderator

Re: EMF Model, Resource loading issue [message #1233719 is a reply to message #1232233] Mon, 20 January 2014 10:26 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
My guess is it has something to do with the noNamespaceSchemaLocation attribute in my input xml file. Any ideas? Sad

Greetings,
Sascha
Re: EMF Model, Resource loading issue [message #1240917 is a reply to message #1233719] Fri, 07 February 2014 08:24 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sascha,

I get the feeling you're not using the generated resource factory to
create the resource you're using to load your model instance. What file
extension does your file have? Is that one same as the one registered
in your model's plugin.xml?

On 20/01/2014 11:26 AM, Sascha Smoo wrote:
> My guess is it has something to do with the noNamespaceSchemaLocation
> attribute in my input xml file. Any ideas? :(
>
> Greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1242953 is a reply to message #1240917] Mon, 10 February 2014 10:00 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

my file has "xml" as file extension and you were right, that wasn't configured in the plugin.xml of my model. But now I'm experiencing another problem:

org.eclipse.emf.ecore.xmi.PackageNotFoundException: Package with uri 'wsdl/com/test/wega/service/dataformat/dataformat.xsd' not found.
org.eclipse.emf.ecore.xmi.PackageNotFoundException: Package with uri 'null' not found.


I guess the xsd can't be loaded, because the path given in the resource xml file is webapp relative. Is there a solution for this?

Thanks and greetings,
Sascha

[Updated on: Mon, 10 February 2014 10:01]

Report message to a moderator

Re: EMF Model, Resource loading issue [message #1242960 is a reply to message #1242953] Mon, 10 February 2014 10:10 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sacha,

Comments below.

On 10/02/2014 11:00 AM, Sascha Smoo wrote:
> Hello Ed,
>
> my file has "xml" as file extension and you were right, that wasn't
> configured in the plugin.xml of my model.
There can be at most one registration per file extension so it's not
likely that registering "xml" will play nicely with other models trying
to use this. You could define Content Type Identifier so that content
type registration is used for the parser and for your editor.
> But now I'm experiencing another problem:
>
>
> org.eclipse.emf.ecore.xmi.PackageNotFoundException: Package with uri
> 'wsdl/com/test/wega/service/dataformat/dataformat.xsd' not found.
Are you sure now that your generated resource factory is being used?
I.e., you've set a breakpoint and confirmed it's being used? I get the
sense that still might not be the case.
>
>
> I guess the xsd can't be loaded, because the path given in the
> resource xml file is webapp relative. Is there a solution for this?
What URI are you using to load this resource? I get the sense it's not
an absolute URI because
org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleXSINoNamespaceSchemaLocation(String)
will generally resolve a relative URI to make it absolute...
> Thanks and greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1243053 is a reply to message #1242960] Mon, 10 February 2014 13:01 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

I've checked the usage of the generated resource factory in my eclipse debugger, it's being called correctly.

The file I'm trying to load comes from my filesystem with an absolut path like this:

/Users/smoothny/Documents/runtime_workspace/ConfigFiles/config_edit/formats/dataformat.xml


The related xsd file defined in the xml is not a file in this location. Do I have to put the xsd to a location similar to the location defined in the xml file?

Greetings,
Sascha
Re: EMF Model, Resource loading issue [message #1243066 is a reply to message #1243053] Mon, 10 February 2014 13:18 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sascha,

Comments below.

On 10/02/2014 2:01 PM, Sascha Smoo wrote:
> Hello Ed,
>
> I've checked the usage of the generated resource factory in my eclipse
> debugger, it's being called correctly.
>
> The file I'm trying to load comes from my filesystem with an absolut
> path like this:
>
> /Users/smoothny/Documents/runtime_workspace/ConfigFiles/config_edit/formats/dataformat.xml
>
It should be
file:/Users/smoothny/Documents/runtime_workspace/ConfigFiles/config_edit/formats/dataformat.xml
or better, if it's in the workspace,
platform:/resource/ConfigFiles/config_edit/formats/dataformat.xml. An
absolute URI is one with a scheme; i.e., an absolute path is not an
absolute URI.
>
> The related xsd file defined in the xml is not a file in this location.
It's expected to be at the right relative location, otherwise the schema
location attribute is simply pointless.
> Do I have to put the xsd to a location similar to the location defined
> in the xml file?
Yes, though it's not clear to me why it even needs to load the schema.
It's just a hint and isn't used unless the package can't be located.
I'd suggest you set a breakpoint in
org.eclipse.emf.ecore.xmi.impl.XMLHandler.getPackageForURI(String) where
I expect the package for the "" namespace should be found in the
extendedMetaData which I'd expect would be non-null on the last line
below, if you're using the generated resource factory properly:

protected EPackage getPackageForURI(String uriString)
{
if (uriString == null)
{
return null;
}

EPackage ePackage =
extendedMetaData == null ?
packageRegistry.getEPackage(uriString) :
extendedMetaData.getPackage(uriString);

>
> Greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1243083 is a reply to message #1243066] Mon, 10 February 2014 13:49 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

the I can't use the "platform:/" prefix because it's an RAP application with no workspace (cause the eclipse workspace mechanics is not available in RAP, as far as I know). Tried the file:/ prefix yet, but that changes nothing.

The getPackageForURI method is called twice if I try to open a resource file. First time for the URI String "wsdl/com/test/wega/service/dataformat/dataformat.xsd" with null as EPackage result and second time for "null" URI String with the same result. If I understood you right, I don't have to put this xsd file referenced in a reachable location. So I don't know what's wrong. Sad

Greetings,
Sascha
Re: EMF Model, Resource loading issue [message #1243113 is a reply to message #1243083] Mon, 10 February 2014 14:34 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sascha,

Comments below.

On 10/02/2014 2:49 PM, Sascha Smoo wrote:
> Hello Ed,
>
> the I can't use the "platform:/" prefix because it's an RAP
> application with no workspace (cause the eclipse workspace mechanics
> is not available in RAP, as far as I know). Tried the file:/ prefix
> yet, but that changes nothing.
If you did it properly, I expect you'd see a different URI because, as I
suggested,
org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleXSINoNamespaceSchemaLocation(String)
would resolve the URI. Use the debugger to determine what's happening
there.

Is
org.eclipse.emf.ecore.xmi.impl.XMLHelperImpl.setExtendedMetaData(ExtendedMetaData)
being called? Does your generated resource factory look something like
this?

/**
* Creates an instance of the resource factory.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public LibraryNonamespaceResourceFactoryImpl() {
super();
extendedMetaData = new BasicExtendedMetaData(new
EPackageRegistryImpl(EPackage.Registry.INSTANCE));
extendedMetaData.putPackage(null,
LibraryNonamespacePackage.eINSTANCE);
}

/**
* Creates an instance of the resource.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Resource createResource(URI uri) {
XMLResource result = new LibraryNonamespaceResourceImpl(uri);
result.getDefaultSaveOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, extendedMetaData);
result.getDefaultLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, extendedMetaData);

result.getDefaultSaveOptions().put(XMLResource.OPTION_SCHEMA_LOCATION,
Boolean.TRUE);

result.getDefaultLoadOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE,
Boolean.TRUE);
result.getDefaultSaveOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE,
Boolean.TRUE);

result.getDefaultLoadOptions().put(XMLResource.OPTION_USE_LEXICAL_HANDLER,
Boolean.TRUE);
return result;
}

I'd expect
org.eclipse.emf.ecore.xmi.impl.XMLHelperImpl.getNoNamespacePackage() to
return the package if those are both the case.
>
> The getPackageForURI method is called twice if I try to open a
> resource file. First time for the URI String
> "wsdl/com/test/wega/service/dataformat/dataformat.xsd" with null as
> EPackage result and second time for "null" URI String with the same
> result. If I understood you right, I don't have to put this xsd file
> referenced in a reachable location. So I don't know what's wrong. :(
> Greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1243128 is a reply to message #1243113] Mon, 10 February 2014 14:53 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

see my generated factory below:

public class DataformatResourceFactoryImpl extends ResourceFactoryImpl {
	/**
	 * Creates an instance of the resource factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public DataformatResourceFactoryImpl() {
		super();
	}

	/**
	 * Creates an instance of the resource.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Resource createResource(URI uri) {
		XMLResource result = new DataformatResourceImpl(uri);
		result.getDefaultSaveOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
		result.getDefaultLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);

		result.getDefaultSaveOptions().put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);

		result.getDefaultLoadOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE);
		result.getDefaultSaveOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE);

		result.getDefaultLoadOptions().put(XMLResource.OPTION_USE_LEXICAL_HANDLER, Boolean.TRUE);
		return result;
	}

} //DataformatResourceFactoryImpl


The setExtendedMetaData method is called, but the extendedMetaData object seems not to hold any data in its registry.

index.php/fa/17439/0/

I will check whats going on in the org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleXSINoNamespaceSchemaLocation(String) method.

Greetings,
Sascha
  • Attachment: screeny2.png
    (Size: 62.75KB, Downloaded 2993 times)

[Updated on: Mon, 10 February 2014 14:54]

Report message to a moderator

Re: EMF Model, Resource loading issue [message #1243217 is a reply to message #1243128] Mon, 10 February 2014 17:30 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sascha,

The generated code you indicates that you've generated this your model a
schema that has a target namespace but you've been showing me XML
instances that can only conform to a schema without a target
namespace. Something is inconsistent. Where is this schema? Where did
this XML instance come from?

On 10/02/2014 3:53 PM, Sascha Smoo wrote:
> Hello Ed,
>
> see my generated factory below:
>
>
> public class DataformatResourceFactoryImpl extends ResourceFactoryImpl {
> /**
> * Creates an instance of the resource factory.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> public DataformatResourceFactoryImpl() {
> super();
> }
>
> /**
> * Creates an instance of the resource.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public Resource createResource(URI uri) {
> XMLResource result = new DataformatResourceImpl(uri);
> result.getDefaultSaveOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
> result.getDefaultLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
>
> result.getDefaultSaveOptions().put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
>
> result.getDefaultLoadOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE);
> result.getDefaultSaveOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE);
>
> result.getDefaultLoadOptions().put(XMLResource.OPTION_USE_LEXICAL_HANDLER, Boolean.TRUE);
> return result;
> }
>
> } //DataformatResourceFactoryImpl
>
>
> The setExtendedMetaData method is called, but the extendedMetaData object seems not to hold any data in its registry.
>
>
>
> I will check whats going on in the org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleXSINoNamespaceSchemaLocation(String) method.
>
> Greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1243278 is a reply to message #1243217] Mon, 10 February 2014 19:34 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

the XSD file I have used to generate the EMF Model comes from a soap web service. The xml files I'm trying to load into this model are hand written as far as I know. So a solution would be to manipulate the XSD file in any way? Maybe I should generate a custom XSD File from the given XMLs and use this XSD to generate the EMF Model.

Greetings,
Sascha
Re: EMF Model, Resource loading issue [message #1243536 is a reply to message #1243278] Tue, 11 February 2014 05:14 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sascha,

Comments below.

On 10/02/2014 8:34 PM, Sascha Smoo wrote:
> Hello Ed,
>
> the XSD file I have used to generate the EMF Model comes from a soap
> web service. The xml files I'm trying to load into this model are hand
> written as far as I know.
The bottom line is that the XML must conform to your model/schema
otherwise you should expect exceptions for all cases where it doesn't
conform.
> So a solution would be to manipulate the XSD file in any way?
The only solution is to ensure the XML instance and schema conform.
> Maybe I should generate a custom XSD File from the given XMLs and use
> this XSD to generate the EMF Model.
That's one way to ensure conformance.
>
> Greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1251767 is a reply to message #1243536] Thu, 20 February 2014 15:22 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

I've just generated my own xsd from my xml files and now everythings works fine, except for one huge problem.
As you said before I will get in trouble if I use 2 models using the same file extensions for their resources. So that's whats happening now, I have to editors with 2 different models and both model resources have the xml file extension. You were talking about registering content types for every type of resource. Could you explain this to me or give me a hint how to do this and how to make my 2 editors aware of the different content types?

Greetings,
Sascha

[Updated on: Thu, 20 February 2014 15:24]

Report message to a moderator

Re: EMF Model, Resource loading issue [message #1252325 is a reply to message #1251767] Fri, 21 February 2014 05:16 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sascha,

For each GenPackage, set the Content Type Identifier. Uses something
like the qualified Java package name into which you are generating that
GenPackage's interfaces. Then regenerate. You should see the
plugin.xml for the model and the editor plugin reflect the registrations
associated with that content type identifier. (In older versions of
EMF, pre-2.9, you'd need to delete the plugin.xmls to regenerate them.)

On 20/02/2014 4:22 PM, Sascha Smoo wrote:
> Hello Ed,
>
> I've just generated my own xsd from my xml files and now everythings
> works fine, except for one huge problem. As you said before I will get
> in trouble if I use 2 models using the same file extensions for their
> resources. You were
> talking about registering content types for every type of resource.
> Could you explain this to me or give me a hint how to do this and how
> to make my 2 editors aware of the different content types?
>
> Greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1252500 is a reply to message #1252325] Fri, 21 February 2014 09:25 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

ok, I've just tried it the way you've said, but it doesn't work for me. Everything seems to be finde, I have just set the content type identifier in both genPackages and the generated everything. Now the plugin xmls contain the newly generated content type extension point. But as you can see it says file extension "dataformat" but it needs to be xml. I've done the same to my other model and editor and there it says "workerchain" instead of xml. If I change both to xml it does not work, and If I keep the workerchain/dataformat extensions it does not work either. So what am I missing here? Sad When I'm adding xml file extension to both content types, I run into the same old problem again... I can only open one type of editor with xml files, running both editors in my application leads to problems.
Another thing I have mentioned is that the "org.eclipse.emf.ecore.extension_parser" extension point is not generated anymore.

index.php/fa/17528/0/

Greetings,
Sascha

[Updated on: Fri, 21 February 2014 10:08]

Report message to a moderator

Re: EMF Model, Resource loading issue [message #1252541 is a reply to message #1252500] Fri, 21 February 2014 10:20 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sacha,

Comments below.

On 21/02/2014 10:25 AM, Sascha Smoo wrote:
> Hello Ed,
>
> ok, I've just tried it the way you've said, but it doesn't work for me. Everything seems to be finde, I have just set the content type identifier in both genPackages and the generated everything.
You've set a different identifier for each one?
> Now the plugin xmls contain the newly generated content type extension point. But as you can see it says file extension "dataformat" but it needs to be xml.
You've changed the File Extension property to "xml" for both of them?
> I've done the same to my other model and editor and there it says "workerchain" instead of xml. If I change both to xml it does not work, and If I keep the workerchain/dataformat extensions it does not work either. So what am I missing here? :(
What specifically doesn't work?
> Another thing I have mentioned is that the "org.eclipse.emf.ecore.extension_parser" extension point is not generated anymore.
No, it should use the content_parser extension point for both. And
it's important you change the file extension in the generator because
you'll notice this affects the generated extensions in the plugin.xml of
the editor projects.
>
>
>
> Greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1252557 is a reply to message #1252541] Fri, 21 February 2014 10:40 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

yes, I've set a unique content type identifier for each of my 2 models and I have changed the file extension to xml in both gen models. The problem is that one of the two editors will throw featurenotfound exceptions if I add both editors to my RAP launch config. If I only start with one at a time everything works fine.

Greetings,
Sascha
Re: EMF Model, Resource loading issue [message #1252580 is a reply to message #1252557] Fri, 21 February 2014 11:11 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sascha,

I'm not sure about how things should work in a RAP environment. Does it
support showing a workspace with resources or is it more of an RCP type
of thing? You should try to set breakpoints in both generated factory
createResource methods to see which is being invoked when...


On 21/02/2014 11:40 AM, Sascha Smoo wrote:
> Hello Ed,
>
> yes, I've set a unique content type identifier for each of my 2 models
> and I have changed the file extension to xml in both gen models. The
> problem is that one of the two editors will throw featurenotfound
> exceptions if I add both editors to my RAP launch config. If I only
> start with one at a time everything works fine.
>
> Greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1252597 is a reply to message #1252580] Fri, 21 February 2014 11:38 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

RAP does not support workspace or resource related things. I'm working with my own custom made project explorer kind of view. It's just a tree viewer with a double click listener on the xml files. Each xml file type (dataformat/workerchain) is opened with it's own call:

WorkerchainEditorAdvisor.openEditor(PlatformUI.getWorkbench(), fileUri);

and 

DataformatEditorAdvisor.openEditor(PlatformUI.getWorkbench(), fileUri);


The URI is created with the absolut path to the file.

I've checked via breakpoints which resource factory is created. In both cases it's the DataFormatResourceFactoryImpl. But in the plugin.xml everything is configured correctly.

Greetings,
Sascha

[Updated on: Fri, 21 February 2014 11:39]

Report message to a moderator

Re: EMF Model, Resource loading issue [message #1252614 is a reply to message #1252597] Fri, 21 February 2014 12:03 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

ok, i figured it out... the problem ist this piece of code in the generated EditorAdvisors.

IEditorDescriptor editorDescriptor = EditUIUtil.getDefaultEditor(uri, null);


It returns the wrong editor for the given xml file content type.

Some additional Information:
I was trying to open my Editor without the descriptor, just by using its unique id. But it seems while loading the editor some other problems occur.

public void createModel() {
		URI resourceURI = EditUIUtil.getURI(getEditorInput());
		Exception exception = null;
		Resource resource = null;
		try {
			// Load the resource through the editing domain.
			//
			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
		}
		catch (Exception e) {
			exception = e;
			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
		}

		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
		if (diagnostic.getSeverity() != Diagnostic.OK) {
			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
		}
		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
	}


This generated method returns the wrong resource by using the wrong resource factory. I've debugged this a bit and have seen getResource() is calling the following method:

protected Resource demandCreateResource(URI uri)
  {
    return createResource(uri, ContentHandler.UNSPECIFIED_CONTENT_TYPE);
  }


which is located in ResourceSetImpl. It seems that the resource is loaded without using the content type, so the first registered factory will be taken to load the resource. (which is the wrong one in this case)

Greetings,
Sascha

[Updated on: Fri, 21 February 2014 15:42]

Report message to a moderator

Re: EMF Model, Resource loading issue [message #1255305 is a reply to message #1252614] Mon, 24 February 2014 09:55 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

it seems that it EMF is not using the configured content type for loading the resource. It tries to figure out the content type itself and this brings up the wrong result again. Why is EMF/Resource Loader trying to guess the content type when I have configured it already?

Greetings,
Sascha
Re: EMF Model, Resource loading issue [message #1255315 is a reply to message #1255305] Mon, 24 February 2014 10:06 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sascha,

I'm not sure how this works in a RAP context. Is that method calling
org.eclipse.emf.edit.ui.util.EditUIUtil.getDefaultEditor(InputStream,
String)? That in turn calls

return getDefaultEditor(fileName,
Platform.getContentTypeManager().findContentTypesFor(contents, fileName));

So what's the platform doing to determine the content type? Maybe in
RAP that's not implemented correctly, and perhaps can't be because there
is no workspace...


On 24/02/2014 10:55 AM, Sascha Smoo wrote:
> Hello Ed,
>
> it seems that it EMF is not using the configured content type for
> loading the resource. It tries to figure out the content type itself
> and this brings up the wrong result again. Why is EMF/Resource Loader
> trying to guess the content type when I have configured it already?
>
> Greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1255342 is a reply to message #1255315] Mon, 24 February 2014 10:42 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hi Ed,

the EditorAdvisor is calling:

public static IEditorDescriptor getDefaultEditor(URI uri, URIConverter uriConverter);

from

org.eclipse.emf.edit.ui.util

This method itself is calling:

public static IEditorDescriptor getDefaultEditor(InputStream contents, String fileName);

In this method there is this method call:

public IContentType[] findContentTypesFor(InputStream contents, String fileName) throws IOException {
		ContentTypeCatalog currentCatalog = getCatalog();
		IContentType[] types = currentCatalog.findContentTypesFor(this, contents, fileName);
		IContentType[] result = new IContentType[types.length];
		int generation = currentCatalog.getGeneration();
		for (int i = 0; i < result.length; i++)
			result[i] = new ContentTypeHandler((ContentType) types[i], generation);
		return result;
}


The types array of IContentType[] looks like this:

[WorkerChainEditor.model.dataformat, WorkerChainEditor.model.workerchain, org.eclipse.core.runtime.xml]


The result array from this method is used in the next method call

private static IEditorDescriptor getDefaultEditor(String fileName, IContentType[] contentTypes)
  {
    IEditorRegistry editorRegistry = PlatformUI.getWorkbench().getEditorRegistry();

    if (contentTypes.length == 0)
    {
      return editorRegistry.getDefaultEditor(fileName, null);
    }

    IEditorDescriptor result = null;
    for (int i = 0; result == null && i < contentTypes.length; i++)
    {
      result = editorRegistry.getDefaultEditor(fileName, contentTypes[i]);
    }
    return result;
  }


this method is from org.eclipse.emf.edit.ui.util. And as you can see in the very last for loop the first editor found for a content type is returned. The first content type in the IContentType array is as we have seen before the dataformat one but it should be workerchain instead.

I'm not sure if this is a problem with RAP because it seems there are no RAP parts involved here. I guess the problem is that all content types are returned for the given input file.

Greetings,
Sascha

[Updated on: Mon, 24 February 2014 10:59]

Report message to a moderator

Re: EMF Model, Resource loading issue [message #1255369 is a reply to message #1255342] Mon, 24 February 2014 11:12 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sascha,

Comments below.

On 24/02/2014 11:42 AM, Sascha Smoo wrote:
> Hi Ed,
>
> the EditorAdvisor is calling:
>
> public static IEditorDescriptor getDefaultEditor(URI uri, URIConverter
> uriConverter);
> from
> org.eclipse.emf.edit.ui.util
>
> This method itself is calling:
>
> public static IEditorDescriptor getDefaultEditor(InputStream contents,
> String fileName);
>
> In this method there is this method call:
>
>
> public IContentType[] findContentTypesFor(InputStream contents, String
> fileName) throws IOException {
> ContentTypeCatalog currentCatalog = getCatalog();
> IContentType[] types =
> currentCatalog.findContentTypesFor(this, contents, fileName);
> IContentType[] result = new IContentType[types.length];
> int generation = currentCatalog.getGeneration();
> for (int i = 0; i < result.length; i++)
> result[i] = new ContentTypeHandler((ContentType) types[i],
> generation);
> return result;
> }
>
>
> The types array of IContentType[] looks like this:
>
>
> [WorkerChainEditor.model.dataformat,
> WorkerChainEditor.model.workerchain, org.eclipse.core.runtime.xml]
>
>
> The result array from this method is used in the next method call
>
>
> private static IEditorDescriptor getDefaultEditor(String fileName,
> IContentType[] contentTypes)
> {
> IEditorRegistry editorRegistry =
> PlatformUI.getWorkbench().getEditorRegistry();
>
> if (contentTypes.length == 0)
> {
> return editorRegistry.getDefaultEditor(fileName, null);
> }
>
> IEditorDescriptor result = null;
> for (int i = 0; result == null && i < contentTypes.length; i++)
> {
> result = editorRegistry.getDefaultEditor(fileName, contentTypes[i]);
> }
> return result;
> }
>
>
> this method is from org.eclipse.emf.edit.ui.util. And as you can see
> in the very last for loop the first editor found for a content type is
> returned. The first content type in the IContentType array is as we
> have seen before the dataformat one but it should be workerchain instead.
That seems to imply that the content really does conform to all those
returned content types. Is
org.eclipse.emf.ecore.xmi.impl.RootXMLContentHandlerImpl.contentDescription(URI,
InputStream, Map<?, ?>, Map<Object, Object>) getting invoked under the
covers?
> I'm not sure if this is a problem with RAP because it seems there are
> no RAP parts involved here.
I'm just not sure if all the delegation points are hooked up properly in
RAP. I'd expect the above method would be invoked if there is proper
checking that the contents of the stream conform to the content type...

What distinguished the content types in your case? Presumably the
namespace of the model, but just so I know the context...
>
> Greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1255386 is a reply to message #1255369] Mon, 24 February 2014 11:39 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

yes this method is involved and I've tried to debug what's going on inside this method. I guess you're right, it seems that my xml input files are conform. What really distinguishes one type from another is not the namespace i think (workerchains only have default namespace declarations) its more the structure of the xml files. workerchains always have "process" named rootelement, the dataforms always have a different unique named element)

<process xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
......
</process>


The dataformat xmls do have a unique namespace, but the workerchains do not.

I'm always running into this last part of the method:

if (rootElementName != null && isMatchingNamespace(rootElementNamespace))
        {
          boolean elementNameMatched = false;
          if (elementNames == null || elementNames.length == 0)
          {
            elementNameMatched = true;
          }
          else
          {
            for (String elementName : elementNames)
            {
              if (rootElementName.equals(elementName))
              {
                elementNameMatched = true;
                break;
              }
            }
          }
          if (elementNameMatched)
          {
            result.put(VALIDITY_PROPERTY, ContentHandler.Validity.VALID);
          }
        }


Where this part is true (elementNameMatched = true), nameSpaceMatching was true because of null namespace. I'm wondering why elementNames is always empty?

if (elementNames == null || elementNames.length == 0)
          {
            elementNameMatched = true;
          }


So is there a way to fix this problem? I feel like i'm in a dead end. :/

Greetings,
Sascha

[Updated on: Mon, 24 February 2014 11:48]

Report message to a moderator

Re: EMF Model, Resource loading issue [message #1255397 is a reply to message #1255386] Mon, 24 February 2014 11:53 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sascha,

Sorry it's taking so long to arrive at a solution. Unfortunately this
content type stuff is quite complicated. Note that your registration is
calling this constructor:

org.eclipse.emf.ecore.xmi.impl.RootXMLContentHandlerImpl.RootXMLContentHandlerImpl(Map<String,
String>)


From the Javadoc (or source code) for that, you can see all the
parameters that are accepted. It includes "elementNames" so you could
specify "process" as the value so that the content type will match only
if the root element is named "process" for workchains. For dataforms you
could list (space separated) all the allowed root element names...

It seems as if that should do the trick. In the worst case, you should
be able to implement your own subclasses to do content type recognition
in some arbitrary way not restricted to what I've already try to provide
directly in EMF...


On 24/02/2014 12:39 PM, Sascha Smoo wrote:
> Hello Ed,
>
> yes this method is involved and I've tried to debug what's going on
> inside this method. I guess you're right, it seems that my xml input
> files are conform. What really distinguishes one type from another is
> not the namespace i think (workerchains only have default namespace
> declarations) its more the structure of the xml files. workerchains
> always have "process" named rootelement, the dataforms always have a
> different unique named element)
>
> <process xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> .....
> </process>
>
>
> The dataformat xmls do have a unique namespace, but the workerchains
> do not.
>
> So is there a way to fix this problem? I feel like i'm in a dead end. :/
>
> Greetings,
> Sascha
Re: EMF Model, Resource loading issue [message #1255413 is a reply to message #1255397] Mon, 24 February 2014 12:14 Go to previous messageGo to next message
Sascha Smoo is currently offline Sascha SmooFriend
Messages: 56
Registered: November 2012
Member
Hello Ed,

finally this did the trick for me:

 <extension point="org.eclipse.core.contenttype.contentTypes">
      <!-- @generated workerchain -->
      <content-type
            base-type="org.eclipse.core.runtime.xml"
            file-extensions="xml"
            id="WorkerChainEditor.model.workerchain"
            name="%_UI_Workerchain_content_type"
            priority="normal">
         <describer class="org.eclipse.emf.ecore.xmi.impl.RootXMLContentHandlerImpl$Describer">
            <parameter
                  name="elementNames"
                  value="process">
            </parameter>
         </describer>
      </content-type>
   </extension>


I've just defined a "elementNames" Parameter in both of my content type definitions. They are automatically used to init the RootXMLContentHandlerImpl class. Now the content type methods work as intended. =)

Thanks and greetings,
Sascha
Re: EMF Model, Resource loading issue [message #1255535 is a reply to message #1255413] Mon, 24 February 2014 14:54 Go to previous message
Ed Merks is currently offline Ed MerksFriend
Messages: 30688
Registered: July 2009
Senior Member
Sascha,

I'm glad to hear all this worked out in the end. Thanks for sharing your
results.


On 24/02/2014 1:14 PM, Sascha Smoo wrote:
> Hello Ed,
>
> finally this did the trick for me:
>
>
> <extension point="org.eclipse.core.contenttype.contentTypes">
> <!-- @generated workerchain -->
> <content-type
> base-type="org.eclipse.core.runtime.xml"
> file-extensions="xml"
> id="WorkerChainEditor.model.workerchain"
> name="%_UI_Workerchain_content_type"
> priority="normal">
> <describer
> class="org.eclipse.emf.ecore.xmi.impl.RootXMLContentHandlerImpl$Describer">
> <parameter
> name="elementNames"
> value="process">
> </parameter>
> </describer>
> </content-type>
> </extension>
>
>
> I've just defined a "elementNames" Parameter in both of my content
> type definitions. They are automatically used to init the
> RootXMLContentHandlerImpl class. Now the content type methods work as
> intended. =)
>
> Thanks and greetings,
> Sascha
Previous Topic:[ChangeRecoder] Unexpected behavior
Next Topic:[Oomph] Adding support for Nebula
Goto Forum:
  


Current Time: Tue Dec 10 22:20:56 GMT 2019

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

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

Back to the top