2222import java .util .Map ;
2323import java .util .function .Supplier ;
2424
25+ import org .eclipse .esmf .ame .config .ApplicationSettings ;
2526import org .eclipse .esmf .ame .exceptions .CreateFileException ;
2627import org .eclipse .esmf .ame .exceptions .FileNotFoundException ;
2728import org .eclipse .esmf .ame .exceptions .FileReadException ;
4546import org .eclipse .esmf .aspectmodel .urn .AspectModelUrn ;
4647import org .eclipse .esmf .aspectmodel .validation .services .AspectModelValidator ;
4748import org .eclipse .esmf .metamodel .AspectModel ;
49+ import org .eclipse .esmf .samm .KnownVersion ;
4850
4951import io .micronaut .http .multipart .CompletedFileUpload ;
5052import jakarta .inject .Singleton ;
@@ -134,7 +136,7 @@ public String migrateModel( final URI uri, final CompletedFileUpload aspectModel
134136 final AspectModel aspectModel = aspectModelLoader .load ( ModelUtils .openInputStreamFromUpload ( aspectModelFile ), uri );
135137
136138 return aspectModel .files ().stream ()
137- .filter ( a -> a .sourceLocation ().map ( source -> source .getScheme ().equals ( "inmemory " ) ).orElse ( false ) ).findFirst ()
139+ .filter ( a -> a .sourceLocation ().map ( source -> source .getScheme ().equals ( "blob " ) ).orElse ( false ) ).findFirst ()
138140 .map ( AspectSerializer .INSTANCE ::aspectModelFileToString )
139141 .orElseThrow ( () -> new InvalidAspectModelException ( "No aspect model found to migrate" ) );
140142 }
@@ -143,7 +145,7 @@ public String getFormattedModel( final URI uri, final CompletedFileUpload aspect
143145 final AspectModel aspectModel = aspectModelLoader .load ( ModelUtils .openInputStreamFromUpload ( aspectModelFile ), uri );
144146
145147 return aspectModel .files ().stream ()
146- .filter ( a -> a .sourceLocation ().map ( source -> source .getScheme ().equals ( "inmemory " ) ).orElse ( false ) ).findFirst ()
148+ .filter ( a -> a .sourceLocation ().map ( source -> source .getScheme ().equals ( "blob " ) ).orElse ( false ) ).findFirst ()
147149 .map ( AspectSerializer .INSTANCE ::aspectModelFileToString )
148150 .orElseThrow ( () -> new InvalidAspectModelException ( "No aspect model found to formate" ) );
149151 }
@@ -175,11 +177,19 @@ public MigrationResult migrateWorkspace( final boolean setNewVersion ) {
175177 private void processVersion ( final String namespace , final Version version , final boolean setNewVersion , final List <String > errors ) {
176178 version .getModels ().forEach ( model -> {
177179 try {
180+ final boolean isNotLatestKnownVersion = KnownVersion .fromVersionString ( model .getVersion () )
181+ .filter ( v -> KnownVersion .getLatest ().equals ( v ) ).isPresent ();
182+
183+ if ( isNotLatestKnownVersion ) {
184+ return ;
185+ }
186+
178187 final Path aspectModelPath = ModelUtils .constructModelPath ( modelPath , namespace , version .getVersion (), model .getModel () );
179188 final AspectModel aspectModel = aspectModelLoader .load ( aspectModelPath .toFile () );
180189
181190 if ( setNewVersion ) {
182191 applyNamespaceVersionChange ( aspectModel );
192+ return ;
183193 }
184194
185195 saveAspectModelFiles ( aspectModel , setNewVersion );
@@ -190,10 +200,37 @@ private void processVersion( final String namespace, final Version version, fina
190200 }
191201
192202 private void applyNamespaceVersionChange ( final AspectModel aspectModel ) {
193- final AspectChangeManager aspectChangeManager = new AspectChangeManager ( aspectModel );
194- final CopyFileWithIncreasedNamespaceVersion changes = new CopyFileWithIncreasedNamespaceVersion ( aspectModel .files ().getFirst (),
195- IncreaseVersion .MAJOR );
196- aspectChangeManager .applyChange ( changes );
203+ try {
204+ final AspectModelFile originalFile = aspectModel .files ().getFirst ();
205+ final AspectChangeManager changeManager = new AspectChangeManager ( aspectModel );
206+ changeManager .applyChange ( new CopyFileWithIncreasedNamespaceVersion ( originalFile , IncreaseVersion .MAJOR ) );
207+
208+ final List <AspectModelFile > newFiles = aspectModel .files ().stream ()
209+ .filter ( file -> !file .namespaceUrn ().getVersion ().equals ( originalFile .namespaceUrn ().getVersion () ) )
210+ .toList ();
211+
212+ if ( newFiles .size () != 1 ) {
213+ return ;
214+ }
215+
216+ final AspectModelFile updatedFile = newFiles .getFirst ();
217+ final URI sourceLocation = updatedFile .sourceLocation ()
218+ .orElseThrow ( () -> new IllegalStateException ( "Source location missing" ) );
219+
220+ if ( new File ( sourceLocation ).exists () ) {
221+ return ;
222+ }
223+
224+ ModelUtils .createFile (
225+ updatedFile .namespaceUrn (),
226+ updatedFile .filename ().orElseThrow ( () -> new IllegalStateException ( "Filename missing" ) ),
227+ ApplicationSettings .getMetaModelStoragePath ()
228+ );
229+
230+ AspectSerializer .INSTANCE .write ( updatedFile );
231+ } catch ( final IOException e ) {
232+ throw new CreateFileException ( "Cannot create file %s on workspace" , e );
233+ }
197234 }
198235
199236 private void saveAspectModelFiles ( final AspectModel aspectModel , final boolean setNewVersion ) {
0 commit comments