|
18 | 18 | import static org.eclipse.syson.sysml.textual.utils.SysMLRelationPredicates.IS_MEMBERSHIP; |
19 | 19 | import static org.eclipse.syson.sysml.textual.utils.SysMLRelationPredicates.IS_METADATA_USAGE; |
20 | 20 |
|
21 | | -import java.lang.Class; |
| 21 | +import java.text.DecimalFormat; |
| 22 | +import java.text.DecimalFormatSymbols; |
22 | 23 | import java.util.ArrayList; |
23 | 24 | import java.util.Collection; |
24 | 25 | import java.util.HashSet; |
25 | 26 | import java.util.Iterator; |
26 | 27 | import java.util.List; |
27 | 28 | import java.util.ListIterator; |
| 29 | +import java.util.Locale; |
28 | 30 | import java.util.Objects; |
29 | 31 | import java.util.Optional; |
30 | 32 | import java.util.Set; |
|
36 | 38 | import org.eclipse.emf.common.util.EList; |
37 | 39 | import org.eclipse.emf.ecore.EObject; |
38 | 40 | import org.eclipse.emf.ecore.InternalEObject; |
39 | | -import org.eclipse.syson.sysml.*; |
| 41 | +import org.eclipse.syson.sysml.AcceptActionUsage; |
| 42 | +import org.eclipse.syson.sysml.ActionDefinition; |
| 43 | +import org.eclipse.syson.sysml.ActionUsage; |
| 44 | +import org.eclipse.syson.sysml.ActorMembership; |
| 45 | +import org.eclipse.syson.sysml.AnalysisCaseUsage; |
| 46 | +import org.eclipse.syson.sysml.AssertConstraintUsage; |
| 47 | +import org.eclipse.syson.sysml.AttributeDefinition; |
| 48 | +import org.eclipse.syson.sysml.AttributeUsage; |
| 49 | +import org.eclipse.syson.sysml.CalculationDefinition; |
| 50 | +import org.eclipse.syson.sysml.Classifier; |
| 51 | +import org.eclipse.syson.sysml.CollectExpression; |
| 52 | +import org.eclipse.syson.sysml.Comment; |
| 53 | +import org.eclipse.syson.sysml.ConjugatedPortDefinition; |
| 54 | +import org.eclipse.syson.sysml.ConjugatedPortTyping; |
| 55 | +import org.eclipse.syson.sysml.ConstraintUsage; |
| 56 | +import org.eclipse.syson.sysml.ControlNode; |
| 57 | +import org.eclipse.syson.sysml.DecisionNode; |
| 58 | +import org.eclipse.syson.sysml.Definition; |
| 59 | +import org.eclipse.syson.sysml.Documentation; |
| 60 | +import org.eclipse.syson.sysml.Element; |
| 61 | +import org.eclipse.syson.sysml.EndFeatureMembership; |
| 62 | +import org.eclipse.syson.sysml.EnumerationDefinition; |
| 63 | +import org.eclipse.syson.sysml.EnumerationUsage; |
| 64 | +import org.eclipse.syson.sysml.Expose; |
| 65 | +import org.eclipse.syson.sysml.Expression; |
| 66 | +import org.eclipse.syson.sysml.Feature; |
| 67 | +import org.eclipse.syson.sysml.FeatureChainExpression; |
| 68 | +import org.eclipse.syson.sysml.FeatureChaining; |
| 69 | +import org.eclipse.syson.sysml.FeatureDirectionKind; |
| 70 | +import org.eclipse.syson.sysml.FeatureMembership; |
| 71 | +import org.eclipse.syson.sysml.FeatureReferenceExpression; |
| 72 | +import org.eclipse.syson.sysml.FeatureTyping; |
| 73 | +import org.eclipse.syson.sysml.FeatureValue; |
| 74 | +import org.eclipse.syson.sysml.FlowEnd; |
| 75 | +import org.eclipse.syson.sysml.FlowUsage; |
| 76 | +import org.eclipse.syson.sysml.ForkNode; |
| 77 | +import org.eclipse.syson.sysml.Import; |
| 78 | +import org.eclipse.syson.sysml.IncludeUseCaseUsage; |
| 79 | +import org.eclipse.syson.sysml.InterfaceDefinition; |
| 80 | +import org.eclipse.syson.sysml.InvocationExpression; |
| 81 | +import org.eclipse.syson.sysml.ItemDefinition; |
| 82 | +import org.eclipse.syson.sysml.ItemUsage; |
| 83 | +import org.eclipse.syson.sysml.JoinNode; |
| 84 | +import org.eclipse.syson.sysml.LibraryPackage; |
| 85 | +import org.eclipse.syson.sysml.LiteralBoolean; |
| 86 | +import org.eclipse.syson.sysml.LiteralExpression; |
| 87 | +import org.eclipse.syson.sysml.LiteralInfinity; |
| 88 | +import org.eclipse.syson.sysml.LiteralInteger; |
| 89 | +import org.eclipse.syson.sysml.LiteralRational; |
| 90 | +import org.eclipse.syson.sysml.LiteralString; |
| 91 | +import org.eclipse.syson.sysml.Membership; |
| 92 | +import org.eclipse.syson.sysml.MembershipExpose; |
| 93 | +import org.eclipse.syson.sysml.MembershipImport; |
| 94 | +import org.eclipse.syson.sysml.MergeNode; |
| 95 | +import org.eclipse.syson.sysml.Metaclass; |
| 96 | +import org.eclipse.syson.sysml.MetadataAccessExpression; |
| 97 | +import org.eclipse.syson.sysml.MetadataDefinition; |
| 98 | +import org.eclipse.syson.sysml.MetadataUsage; |
| 99 | +import org.eclipse.syson.sysml.MultiplicityRange; |
| 100 | +import org.eclipse.syson.sysml.Namespace; |
| 101 | +import org.eclipse.syson.sysml.NamespaceExpose; |
| 102 | +import org.eclipse.syson.sysml.NamespaceImport; |
| 103 | +import org.eclipse.syson.sysml.NullExpression; |
| 104 | +import org.eclipse.syson.sysml.ObjectiveMembership; |
| 105 | +import org.eclipse.syson.sysml.OccurrenceDefinition; |
| 106 | +import org.eclipse.syson.sysml.OccurrenceUsage; |
| 107 | +import org.eclipse.syson.sysml.OperatorExpression; |
| 108 | +import org.eclipse.syson.sysml.OwningMembership; |
40 | 109 | import org.eclipse.syson.sysml.Package; |
| 110 | +import org.eclipse.syson.sysml.ParameterMembership; |
| 111 | +import org.eclipse.syson.sysml.PartDefinition; |
| 112 | +import org.eclipse.syson.sysml.PartUsage; |
| 113 | +import org.eclipse.syson.sysml.PayloadFeature; |
| 114 | +import org.eclipse.syson.sysml.PerformActionUsage; |
| 115 | +import org.eclipse.syson.sysml.PortDefinition; |
| 116 | +import org.eclipse.syson.sysml.PortUsage; |
| 117 | +import org.eclipse.syson.sysml.PortionKind; |
| 118 | +import org.eclipse.syson.sysml.Redefinition; |
| 119 | +import org.eclipse.syson.sysml.ReferenceSubsetting; |
| 120 | +import org.eclipse.syson.sysml.ReferenceUsage; |
| 121 | +import org.eclipse.syson.sysml.Relationship; |
| 122 | +import org.eclipse.syson.sysml.RenderingUsage; |
| 123 | +import org.eclipse.syson.sysml.RequirementDefinition; |
| 124 | +import org.eclipse.syson.sysml.RequirementUsage; |
| 125 | +import org.eclipse.syson.sysml.ReturnParameterMembership; |
| 126 | +import org.eclipse.syson.sysml.SatisfyRequirementUsage; |
| 127 | +import org.eclipse.syson.sysml.SelectExpression; |
| 128 | +import org.eclipse.syson.sysml.Specialization; |
| 129 | +import org.eclipse.syson.sysml.StakeholderMembership; |
| 130 | +import org.eclipse.syson.sysml.StateUsage; |
| 131 | +import org.eclipse.syson.sysml.Subclassification; |
| 132 | +import org.eclipse.syson.sysml.SubjectMembership; |
| 133 | +import org.eclipse.syson.sysml.Subsetting; |
| 134 | +import org.eclipse.syson.sysml.SuccessionAsUsage; |
| 135 | +import org.eclipse.syson.sysml.SysmlPackage; |
| 136 | +import org.eclipse.syson.sysml.TextualRepresentation; |
| 137 | +import org.eclipse.syson.sysml.TransitionFeatureKind; |
| 138 | +import org.eclipse.syson.sysml.TransitionFeatureMembership; |
| 139 | +import org.eclipse.syson.sysml.TransitionUsage; |
| 140 | +import org.eclipse.syson.sysml.TriggerInvocationExpression; |
| 141 | +import org.eclipse.syson.sysml.TriggerKind; |
| 142 | +import org.eclipse.syson.sysml.Type; |
| 143 | +import org.eclipse.syson.sysml.Usage; |
| 144 | +import org.eclipse.syson.sysml.UseCaseDefinition; |
| 145 | +import org.eclipse.syson.sysml.UseCaseUsage; |
| 146 | +import org.eclipse.syson.sysml.VerificationCaseUsage; |
| 147 | +import org.eclipse.syson.sysml.ViewUsage; |
| 148 | +import org.eclipse.syson.sysml.ViewpointDefinition; |
| 149 | +import org.eclipse.syson.sysml.VisibilityKind; |
41 | 150 | import org.eclipse.syson.sysml.helper.EMFUtils; |
42 | 151 | import org.eclipse.syson.sysml.helper.LabelConstants; |
43 | 152 | import org.eclipse.syson.sysml.textual.utils.Appender; |
|
54 | 163 | */ |
55 | 164 | public class SysMLElementSerializer extends SysmlSwitch<String> { |
56 | 165 |
|
| 166 | + private static final DecimalFormat SIMPLE_LITERAL_RATIONAL_FORMAT = new DecimalFormat("0.0#", new DecimalFormatSymbols(Locale.US)); |
| 167 | + |
| 168 | + private static final DecimalFormat SCIENTIFIC_LITERAL_RATIONAL_FORMAT = new DecimalFormat("0.0#####E0", new DecimalFormatSymbols(Locale.US)); |
| 169 | + |
57 | 170 | private final String lineSeparator; |
58 | 171 |
|
59 | 172 | private final String indentation; |
@@ -511,10 +624,18 @@ public String caseLiteralInteger(LiteralInteger literal) { |
511 | 624 | @Override |
512 | 625 | public String caseLiteralRational(LiteralRational literal) { |
513 | 626 | Appender builder = this.newAppender(); |
514 | | - builder.append(String.valueOf(literal.getValue())); |
| 627 | + builder.append(this.toPreciseReal(literal.getValue())); |
515 | 628 | return builder.toString(); |
516 | 629 | } |
517 | 630 |
|
| 631 | + private String toPreciseReal(double value) { |
| 632 | + if (Math.abs(value) >= 1e-3 && Math.abs(value) < 1e6) { |
| 633 | + return SIMPLE_LITERAL_RATIONAL_FORMAT.format(value); |
| 634 | + } else { |
| 635 | + return SCIENTIFIC_LITERAL_RATIONAL_FORMAT.format(value); |
| 636 | + } |
| 637 | + } |
| 638 | + |
518 | 639 | @Override |
519 | 640 | public String caseLiteralString(LiteralString literal) { |
520 | 641 | Appender builder = this.newAppender(); |
|
0 commit comments