@@ -9,18 +9,11 @@ import jetbrains.mps.extapi.model.SModelData
99import jetbrains.mps.extapi.model.SModelSimpleHeader
1010import jetbrains.mps.extapi.persistence.FileDataSource
1111import jetbrains.mps.ide.MPSCoreComponents
12- import jetbrains.mps.internal.collections.runtime.ISelector
1312import jetbrains.mps.internal.collections.runtime.ListSequence
1413import jetbrains.mps.persistence.DataLocationAwareModelFactory
1514import jetbrains.mps.smodel.SModel.ImportElement
1615import jetbrains.mps.smodel.SModelId
1716import jetbrains.mps.smodel.SNodeUtil
18- import jetbrains.mps.smodel.adapter.ids.SContainmentLinkId
19- import jetbrains.mps.smodel.adapter.ids.SPropertyId
20- import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory
21- import jetbrains.mps.smodel.adapter.structure.link.SContainmentLinkAdapter
22- import jetbrains.mps.smodel.adapter.structure.link.SContainmentLinkAdapterById
23- import jetbrains.mps.smodel.adapter.structure.property.SPropertyAdapter
2417import jetbrains.mps.util.FileUtil
2518import jetbrains.mps.util.JDOMUtil
2619import jetbrains.mps.util.NameUtil
@@ -30,14 +23,10 @@ import org.fbme.ide.iec61499.repository.PlatformElement
3023import org.fbme.ide.iec61499.repository.PlatformElementsOwner
3124import org.fbme.ide.iec61499.repository.PlatformRepository
3225import org.fbme.ide.platform.MpsLanguages
33- import org.fbme.ide.platform.converter.PlatformConverter
3426import org.fbme.ide.platform.converter.PlatformConverter.create
3527import org.fbme.lib.common.Declaration
3628import org.fbme.lib.common.RootElement
3729import org.fbme.lib.iec61499.declarations.*
38- import org.fbme.lib.iec61499.parser.Iec61499ConverterConfiguration
39- import org.fbme.lib.iec61499.parser.StandardIec61499ConverterConfiguration
40- import org.fbme.lib.iec61499.stringify.DependentDeclarationGenerator
4130import org.fbme.lib.iec61499.stringify.RootDeclarationPrinter
4231import org.jdom.Document
4332import org.jetbrains.mps.openapi.model.SModel
@@ -55,7 +44,6 @@ import java.io.InputStreamReader
5544import java.io.OutputStream
5645import java.util.*
5746import java.util.stream.Collectors
58- import kotlin.io.path.Path
5947
6048class Iec61499ModelFactory : ModelFactory , DataLocationAwareModelFactory {
6149 private fun supportedFileExtension (fileExt : String ): Boolean {
@@ -66,7 +54,6 @@ class Iec61499ModelFactory : ModelFactory, DataLocationAwareModelFactory {
6654 || fileExt == DEV_FILE_EXT
6755 || fileExt == SYS_FILE_EXT
6856 || fileExt == SEG_FILE_EXT
69- || fileExt == CFG_FILE_EXT
7057 }
7158
7259 override fun supports (dataSource : DataSource ): Boolean {
@@ -251,12 +238,7 @@ class Iec61499ModelFactory : ModelFactory, DataLocationAwareModelFactory {
251238 val importedModels = model.importedModels()
252239 val richHeader = Iec61499ModelHeader (
253240 header.modelReference,
254- ListSequence .fromList(importedModels)
255- .select(object : ISelector <ImportElement , SModelReference >() {
256- override fun select (it : ImportElement ): SModelReference {
257- return it.modelReference
258- }
259- }).toListSequence()
241+ importedModels.map { it.modelReference }
260242 )
261243 richHeader.save(headerOS)
262244 } finally {
@@ -280,46 +262,16 @@ class Iec61499ModelFactory : ModelFactory, DataLocationAwareModelFactory {
280262 .getComponent(MPSCoreComponents ::class .java).moduleRepository
281263 val platformRepository = PlatformRepository (repository)
282264
283- val nodesToDelete = mutableListOf< SNode >()
284- val dependents = mutableListOf< SNode >()
265+ val errors = arrayListOf< SModel . Problem >()
266+ // Write nodes to xml files
285267 for (rootNode in model.rootNodes) {
286- if (rootNode.getProperty(SNodeUtil .property_BaseConcept_virtualPackage).orEmpty().endsWith(" _dependent" )) {
287- // c.dropReference(it.link)
288- nodesToDelete.add(rootNode)
268+ val document = try {
269+ val declaration = platformRepository.getAdapter(rootNode, Declaration ::class .java)
270+ RootDeclarationPrinter (declaration).print ()
271+ } catch (e: Exception ) {
272+ errors + = PersistenceProblem (SModel .Problem .Kind .Save , e.message, rootNode.name, true )
289273 continue
290274 }
291- val owner = PlatformElementsOwner ()
292- val conf = PlatformConverter .STANDARD_CONFIG_FACTORY .createConfiguration(owner)
293- val declaration = platformRepository.getAdapter(rootNode, Declaration ::class .java)
294-
295- val els = DependentDeclarationGenerator (declaration, conf).generate()
296- els.forEach { element ->
297- val node = (element as PlatformElement ).node
298- node.setProperty(SNodeUtil .property_BaseConcept_virtualPackage, rootNode.getProperty(SNodeUtil .property_BaseConcept_virtualPackage).orEmpty() + " .${rootNode.name} _dependent" )
299- dependents.add(node)
300- }
301- }
302-
303- LOG .info(" Deleting nodes size: {}" , nodesToDelete.size)
304- nodesToDelete.forEach {
305- model.enterUpdateMode()
306- model.removeRootNode(it)
307- it.delete()
308- model.leaveUpdateMode()
309- }
310- LOG .info(" Dependents size: {}" , dependents.size)
311- dependents.forEach {
312- model.enterUpdateMode()
313- model.addRootNode(it)
314- model.leaveUpdateMode()
315- }
316-
317- // Write nodes to xml files
318- for (rootNode in model.rootNodes) {
319- val conf = StandardIec61499ConverterConfiguration (platformRepository.iec61499Factory, platformRepository.stFactory)
320-
321- val declaration = platformRepository.getAdapter(rootNode, Declaration ::class .java)
322- val document = RootDeclarationPrinter (declaration!! , conf).print ()
323275 val folderName =
324276 rootNode.getProperty(SNodeUtil .property_BaseConcept_virtualPackage).orEmpty().replace(" ." , " /" )
325277 val fileLocalName = rootNode.name + " ." + getExtensionOfSource(rootNode, platformRepository)
@@ -338,15 +290,17 @@ class Iec61499ModelFactory : ModelFactory, DataLocationAwareModelFactory {
338290 for (file in trackedSources) {
339291 file.delete()
340292 }
293+
294+ if (errors.isNotEmpty()) {
295+ throw ModelSaveException (" Multiple errors raised during save" , errors, null )
296+ }
341297 } catch (e: IOException ) {
342298 LOG .error(" Exception raised during save" , e)
343299 throw ModelSaveException (" Exception raised during save" , emptyList(), e)
344300 }
345301 }
346302 }
347303
348-
349-
350304 companion object {
351305 private val LOG = LoggerFactory .getLogger(Iec61499ModelFactory ::class .java)
352306
@@ -357,7 +311,6 @@ class Iec61499ModelFactory : ModelFactory, DataLocationAwareModelFactory {
357311 const val DEV_FILE_EXT = " dev"
358312 const val SEG_FILE_EXT = " seg"
359313 const val SYS_FILE_EXT = " sys"
360- const val CFG_FILE_EXT = " cfg"
361314 const val HEADER_FILE_EXT = " iec61499"
362315 const val HEADER_FILE = " header.iec61499"
363316
@@ -391,7 +344,6 @@ class Iec61499ModelFactory : ModelFactory, DataLocationAwareModelFactory {
391344 DEV_FILE_EXT -> (converter.convertDeviceType() as PlatformElement ).node
392345 SEG_FILE_EXT -> (converter.convertSegmentType() as PlatformElement ).node
393346 SYS_FILE_EXT -> (converter.convertSystemConfiguration() as PlatformElement ).node
394- CFG_FILE_EXT -> (converter.convertCATConfiguration() as PlatformElement ).node
395347 else -> null
396348 }
397349 }
@@ -406,7 +358,6 @@ class Iec61499ModelFactory : ModelFactory, DataLocationAwareModelFactory {
406358 is DeviceTypeDeclaration -> DEV_FILE_EXT
407359 is SegmentTypeDeclaration -> SEG_FILE_EXT
408360 is SystemDeclaration -> SYS_FILE_EXT
409- is CATBlockTypeDeclaration -> CFG_FILE_EXT
410361 else -> null
411362 }
412363 }
0 commit comments