Skip to content

Commit 2966260

Browse files
committed
Merge branch 'master' into dev-cat-templ
2 parents ab87773 + 6b59321 commit 2966260

7 files changed

Lines changed: 282 additions & 124 deletions

File tree

.idea/encodings.xml

Lines changed: 0 additions & 4 deletions
This file was deleted.

.idea/kotlinScripting.xml

Lines changed: 0 additions & 6 deletions
This file was deleted.

code/language/languages/org.fbme.ide.st.lang/models/org.fbme.ide.st.lang.editor.mps

Lines changed: 266 additions & 5 deletions
Large diffs are not rendered by default.

code/library/src/main/kotlin/org/fbme/lib/iec61499/stringify/BasicFBTypePrinter.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ class BasicFBTypePrinter(declaration: BasicFBTypeDeclaration) :
6464
val conditionText: String = when {
6565
guardCondition == null && eventPresentation.isEmpty() -> "1"
6666
guardCondition != null && eventPresentation.isEmpty() -> {
67-
"[" + escapeXML(STPrinter.printExpression(guardCondition)) + "]"
67+
"[" + STPrinter.printExpression(guardCondition) + "]"
6868
}
6969

7070
guardCondition == null -> eventPresentation
71-
else -> "$eventPresentation[" + escapeXML(STPrinter.printExpression(guardCondition)) + "]"
71+
else -> "$eventPresentation[" + STPrinter.printExpression(guardCondition) + "]"
7272
}
7373
element.setAttribute("Condition", conditionText)
7474
return element
@@ -82,12 +82,12 @@ class BasicFBTypePrinter(declaration: BasicFBTypeDeclaration) :
8282
ParameterDeclarationPrinter.printAll(this.element.temporaryVariables, element)
8383
if (language === AlgorithmLanguage.ST) {
8484
val st = Element("ST")
85-
st.setAttribute("Text", escapeXML(STPrinter.printStatementList((body as AlgorithmBody.ST).statements)))
85+
st.setAttribute("Text", STPrinter.printStatementList((body as AlgorithmBody.ST).statements))
8686
element.addContent(st)
8787
} else if (AlgorithmLanguage.isUnknown(language)) {
8888
val other = Element("Other")
8989
other.setAttribute("Language", language.languageName)
90-
other.setAttribute("Text", escapeXML((body as AlgorithmBody.Unknown).text))
90+
other.setAttribute("Text", (body as AlgorithmBody.Unknown).text)
9191
element.addContent(other)
9292
} else {
9393
throw IllegalStateException("Unrecognized language")

code/library/src/main/kotlin/org/fbme/lib/iec61499/stringify/PrinterBase.kt

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,5 @@ abstract class PrinterBase<ElementT : Element>(protected val element: ElementT)
1313
}
1414
parent.addContent(child)
1515
}
16-
17-
@JvmStatic
18-
protected fun escapeXML(text: String?): String? {
19-
var text = text ?: return null
20-
text = text.replace("\n", "&#10;")
21-
text = text.replace("\"", "&#34;")
22-
text = text.replace("&", "&#38;")
23-
text = text.replace("'", "&#39;")
24-
text = text.replace("<", "&#60;")
25-
text = text.replace(">", "&#62;")
26-
return text
27-
}
2816
}
2917
}

code/nxt-integration/src/test/java/org/fbme/integration/nxt/importer/BasicFbTypeNxtImporterTest.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

code/platform/src/main/kotlin/org/fbme/ide/platform/persistence/Iec61499ModelFactory.kt

Lines changed: 12 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,11 @@ import jetbrains.mps.extapi.model.SModelData
99
import jetbrains.mps.extapi.model.SModelSimpleHeader
1010
import jetbrains.mps.extapi.persistence.FileDataSource
1111
import jetbrains.mps.ide.MPSCoreComponents
12-
import jetbrains.mps.internal.collections.runtime.ISelector
1312
import jetbrains.mps.internal.collections.runtime.ListSequence
1413
import jetbrains.mps.persistence.DataLocationAwareModelFactory
1514
import jetbrains.mps.smodel.SModel.ImportElement
1615
import jetbrains.mps.smodel.SModelId
1716
import 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
2417
import jetbrains.mps.util.FileUtil
2518
import jetbrains.mps.util.JDOMUtil
2619
import jetbrains.mps.util.NameUtil
@@ -30,14 +23,10 @@ import org.fbme.ide.iec61499.repository.PlatformElement
3023
import org.fbme.ide.iec61499.repository.PlatformElementsOwner
3124
import org.fbme.ide.iec61499.repository.PlatformRepository
3225
import org.fbme.ide.platform.MpsLanguages
33-
import org.fbme.ide.platform.converter.PlatformConverter
3426
import org.fbme.ide.platform.converter.PlatformConverter.create
3527
import org.fbme.lib.common.Declaration
3628
import org.fbme.lib.common.RootElement
3729
import 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
4130
import org.fbme.lib.iec61499.stringify.RootDeclarationPrinter
4231
import org.jdom.Document
4332
import org.jetbrains.mps.openapi.model.SModel
@@ -55,7 +44,6 @@ import java.io.InputStreamReader
5544
import java.io.OutputStream
5645
import java.util.*
5746
import java.util.stream.Collectors
58-
import kotlin.io.path.Path
5947

6048
class 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

Comments
 (0)