From 74fae12819c80b8478eab352b18d7eb0a51605b3 Mon Sep 17 00:00:00 2001 From: Dominique Marcadet <Dominique.Marcadet@centralesupelec.fr> Date: Thu, 14 Feb 2019 15:11:53 +0100 Subject: [PATCH] NSD single file and zip van be loaded in editor --- .../plugin.xml | 9 ++ .../plugin.xml | 10 ++ .../iec61850/nsd/util/NsdResourceImpl.java | 11 ++- .../nsd/util/NsdResourceSetFactory.java | 36 +++++++ .../iec61850/nsd/util/NsdResourceSetImpl.java | 98 ++++++++++--------- 5 files changed, 118 insertions(+), 46 deletions(-) create mode 100644 fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetFactory.java diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.xml b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.xml index fc2be38..1a2947e 100644 --- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.xml +++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.xml @@ -36,4 +36,13 @@ org.eclipse.emf.edit.provider.IItemPropertySource"/> </extension> + <extension + point="fr.centralesupelec.edf.riseclipse.main.meta_models"> + <meta_model + adapterFactory="fr.centralesupelec.edf.riseclipse.iec61850.nsd.provider.NsdItemProviderAdapterFactory" + name="IEC61850 NSD (version 2017A)" + uri="http://www.iec.ch/61850/2016/NSD"> + </meta_model> + </extension> + </plugin> diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/plugin.xml b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/plugin.xml index e93ddc7..9c5c4f6 100644 --- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/plugin.xml +++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/plugin.xml @@ -44,4 +44,14 @@ class="fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceFactoryImpl"/> </extension> + <extension + point="fr.centralesupelec.edf.riseclipse.main.meta_models"> + <meta_model + name="IEC61850 NSD (version 2017A)" + resourceFactory="fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceFactoryImpl" + resourceSetFactory="fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceSetFactory" + uri="http://www.iec.ch/61850/2016/NSD"> + </meta_model> + </extension> + </plugin> diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceImpl.java index cb01b7c..b88be73 100644 --- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceImpl.java +++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceImpl.java @@ -20,9 +20,11 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.util; import org.eclipse.emf.common.util.URI; - import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl; +import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole; +import fr.centralesupelec.edf.riseclipse.util.IRiseClipseResource; + /** * <!-- begin-user-doc --> * The <b>Resource </b> associated with the package. @@ -30,7 +32,7 @@ import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl; * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceFactoryImpl * @generated */ -public class NsdResourceImpl extends XMLResourceImpl { +public class NsdResourceImpl extends XMLResourceImpl implements IRiseClipseResource { /** * Creates an instance of the resource. * <!-- begin-user-doc --> @@ -42,4 +44,9 @@ public class NsdResourceImpl extends XMLResourceImpl { super( uri ); } + @Override + public void printStatistics( IRiseClipseConsole console ) { + // TODO ! + } + } //NsdResourceImpl diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetFactory.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetFactory.java new file mode 100644 index 0000000..c18d5be --- /dev/null +++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetFactory.java @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2019 CentraleSupélec & EDF. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * This file is part of the RiseClipse tool + * + * Contributors: + * Computer Science Department, CentraleSupélec + * EDF R&D + * Contacts: + * dominique.marcadet@centralesupelec.fr + * aurelie.dehouck-neveu@edf.fr + * Web site: + * http://wdi.supelec.fr/software/RiseClipse/ + * + */ +package fr.centralesupelec.edf.riseclipse.iec61850.nsd.util; + +import fr.centralesupelec.edf.riseclipse.util.IRiseClipseResourceSet; +import fr.centralesupelec.edf.riseclipse.util.RiseClipseResourceSetFactory; + +public class NsdResourceSetFactory extends RiseClipseResourceSetFactory { + + /* (non-Javadoc) + * @see fr.centralesupelec.edf.riseclipse.util.RiseClipseResourceSetFactory#createResourceSet() + */ + @Override + public IRiseClipseResourceSet createResourceSet() { + // TODO Auto-generated method stub + return new NsdResourceSetImpl(); + } + +} diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java index be4362b..cc9a0df 100644 --- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java +++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java @@ -24,15 +24,14 @@ import java.util.HashMap; import java.util.Map; import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; - import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot; import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS; import fr.centralesupelec.edf.riseclipse.util.AbstractRiseClipseConsole; import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole; +import fr.centralesupelec.edf.riseclipse.util.RiseClipseResourceSet; -public class NsdResourceSetImpl extends ResourceSetImpl { +public class NsdResourceSetImpl extends RiseClipseResourceSet { private Map< String, NS > nsdResources; @@ -71,8 +70,60 @@ public class NsdResourceSetImpl extends ResourceSetImpl { nsdResources.put( ns.getId(), ns ); } + /* (non-Javadoc) + * @see fr.centralesupelec.edf.riseclipse.util.RiseClipseResourceSet#finalizeLoad(fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole) + */ + @Override + public void finalizeLoad( IRiseClipseConsole console ) { + buildExplicitLinks( console ); + } + + /* + * The following links are implicit: + * + * DependsOn.id -> NS.id DONE + * AnyLNClass.base -> AbstractLNClass DONE + * DataObject.type -> CDC.name DONE + * DataObject.presCond -> PresenceCondition.name DONE + * DataObject.dsPresCond -> PresenceCondition.name DONE + * SubDataObject.type -> CDC.name DONE + * SubDataObject.presCond -> PresenceCondition.name DONE + * SubDataObject.sizeAttribute -> DataAttribute.name DONE + * SubDataObject.maxIndexAttribute -> DataAttribute.name DONE + * DataAttribute.fc -> FunctionalConstraint.abbreviation DONE + * DataAttribute.presCond -> PresenceCondition.name DONE + * DataAttribute.sizeAttribute -> DataAttribute.name DONE + * DataAttribute.maxIndexAttribute -> DataAttribute.name DONE + * ServiceParameter.name -> DataAttribute.name ? Name of the data attribute but may be not name of a DataAttribute ? + * SubDataAttribute.presCond -> PresenceCondition.name DONE + * SubDataAttribute.sizeAttribute -> DataAttribute.name ? Which DataAttribute ? + * SubDataAttribute.maxIndexAttribute -> DataAttribute.name ? Which DataAttribute ? + * Enumeration.inheritedFrom -> Enumeration.name DONE + * ServiceCDC.cdc -> CDC.name ? not sure and in ServiceNS file + * ServiceCDC.ServiceDataAttribute -> DataAttribute.name ? not sure and in ServiceNS file + * ServiceDataAttribute.fc -> FunctionalConstraint.abbreviation ? in ServiceNS file + * ServiceDataAttribute.presCond -> PresenceCondition.name ? in ServiceNS file + * AppliesTo.id -> NS.id ? in ServiceNS file + * ServiceTypeRealization.fc -> FunctionalConstraint.abbreviation ? ServiceTypeRealization is not a name of a type but a name of a reference + * ServiceTypeRealization.presCond -> PresenceCondition.name ? ServiceTypeRealization is not a name of a type but a name of a reference + * + */ + private void buildExplicitLinks( IRiseClipseConsole console ) { + for( Resource resource : getResources() ) { + DocumentRoot root = (DocumentRoot) resource.getContents().get( 0 ); + NS ns = ( NS ) root.getNS(); + ns.buildExplicitLinks( console ); + } + + } + + public NS getNS( String id ) { + return nsdResources.get( id ); + } + /* * Constraints + * * NSDoc: * Name: uniqueDocID Selector: nsd:Doc Field: @id * Within an NSDoc element, there shall not be two Doc sub-elements with same id. @@ -173,46 +224,5 @@ public class NsdResourceSetImpl extends ResourceSetImpl { * ServiceNS/ServiceCDCs: * Name: uniqueServiceCDC Selector: nsd:ServiceCDC Field: @cdc @variant * Within an ServiceNS, there shall not be two ServiceCDC sub-elements with same name and (if defined) variant. - * - * - * The following links are implicit: - * DependsOn.id -> NS.id DONE - * AnyLNClass.base -> AbstractLNClass DONE - * DataObject.type -> CDC.name DONE - * DataObject.presCond -> PresenceCondition.name DONE - * DataObject.dsPresCond -> PresenceCondition.name DONE - * SubDataObject.type -> CDC.name DONE - * SubDataObject.presCond -> PresenceCondition.name DONE - * SubDataObject.sizeAttribute -> DataAttribute.name DONE - * SubDataObject.maxIndexAttribute -> DataAttribute.name DONE - * DataAttribute.fc -> FunctionalConstraint.abbreviation DONE - * DataAttribute.presCond -> PresenceCondition.name DONE - * DataAttribute.sizeAttribute -> DataAttribute.name DONE - * DataAttribute.maxIndexAttribute -> DataAttribute.name DONE - * ServiceParameter.name -> DataAttribute.name ? Name of the data attribute but may be not name of a DataAttribute ? - * SubDataAttribute.presCond -> PresenceCondition.name DONE - * SubDataAttribute.sizeAttribute -> DataAttribute.name ? Which DataAttribute ? - * SubDataAttribute.maxIndexAttribute -> DataAttribute.name ? Which DataAttribute ? - * Enumeration.inheritedFrom -> Enumeration.name DONE - * ServiceCDC.cdc -> CDC.name ? not sure and in ServiceNS file - * ServiceCDC.ServiceDataAttribute -> DataAttribute.name ? not sure and in ServiceNS file - * ServiceDataAttribute.fc -> FunctionalConstraint.abbreviation ? in ServiceNS file - * ServiceDataAttribute.presCond -> PresenceCondition.name ? in ServiceNS file - * AppliesTo.id -> NS.id ? in ServiceNS file - * ServiceTypeRealization.fc -> FunctionalConstraint.abbreviation ? ServiceTypeRealization is not a name of a type but a name of a reference - * ServiceTypeRealization.presCond -> PresenceCondition.name ? ServiceTypeRealization is not a name of a type but a name of a reference */ - public void buildExplicitLinks( IRiseClipseConsole console ) { - for( Resource resource : getResources() ) { - DocumentRoot root = (DocumentRoot) resource.getContents().get( 0 ); - NS ns = ( NS ) root.getNS(); - ns.buildExplicitLinks( console ); - } - - } - - public NS getNS( String id ) { - return nsdResources.get( id ); - } - } -- GitLab