|
67 | 67 | import org.sonatype.m2e.discovery.catalog.model.DiscoveryCategory; |
68 | 68 | import org.sonatype.m2e.discovery.catalog.model.DiscoveryIcon; |
69 | 69 | import org.sonatype.m2e.discovery.catalog.model.IUData; |
| 70 | +import org.sonatype.m2e.discovery.catalog.model.InputLocation; |
| 71 | +import org.sonatype.m2e.discovery.catalog.model.InputLocationTracker; |
70 | 72 | import org.sonatype.m2e.discovery.catalog.model.MavenData; |
71 | 73 | import org.sonatype.m2e.discovery.catalog.model.P2Data; |
72 | | -import org.sonatype.m2e.discovery.catalog.model.io.xpp3.DiscoveryCatalogModelXpp3Reader; |
| 74 | +import org.sonatype.m2e.discovery.catalog.model.io.xpp3.DiscoveryCatalogModelXpp3ReaderEx; |
73 | 75 | import org.sonatype.m2e.discovery.publisher.p2.facade.P2Facade; |
74 | 76 | import org.sonatype.tycho.equinox.EquinoxServiceFactory; |
75 | 77 | import org.sonatype.tycho.p2.facade.internal.P2ApplicationLauncher; |
@@ -149,6 +151,9 @@ public void execute() |
149 | 151 | throw new RuntimeException( "Duplicate catalog item id " + catalogItem.getId() ); |
150 | 152 | } |
151 | 153 |
|
| 154 | + getLog().debug( "Processing catalog item with id " + catalogItem.getId() ); |
| 155 | + validateCatalogItem( catalog, catalogItem ); |
| 156 | + |
152 | 157 | boolean hasLifecycleMappings = false; |
153 | 158 | LifecycleMappingMetadataSource mergedLifecycleMappingMetadataSource = |
154 | 159 | new LifecycleMappingMetadataSource(); |
@@ -275,6 +280,46 @@ else if ( mavenData != null ) |
275 | 280 | } |
276 | 281 | } |
277 | 282 |
|
| 283 | + private void validateCatalogItem( InputLocationTracker locationTracker, DiscoveryCatalogItem item ) |
| 284 | + { |
| 285 | + List<String> messages = new ArrayList<String>(); |
| 286 | + if ( nv( item.getId() ) == null ) |
| 287 | + { |
| 288 | + messages.add( "id must be specified" ); |
| 289 | + } |
| 290 | + if ( nv( item.getProvider() ) == null ) |
| 291 | + { |
| 292 | + messages.add( "provider must be specified" ); |
| 293 | + } |
| 294 | + |
| 295 | + if ( !messages.isEmpty() ) |
| 296 | + { |
| 297 | + StringBuilder sb = new StringBuilder(); |
| 298 | + sb.append( "Problems with <catalogItem>" ); |
| 299 | + |
| 300 | + InputLocation location = item.getLocation( "" ); |
| 301 | + if ( location != null ) |
| 302 | + { |
| 303 | + sb.append( '[' ).append( location.toString() ).append( ']' ); |
| 304 | + } |
| 305 | + |
| 306 | + for ( String msg : messages ) |
| 307 | + { |
| 308 | + sb.append( "\n " ).append( msg ); |
| 309 | + } |
| 310 | + throw new RuntimeException( sb.toString() ); |
| 311 | + } |
| 312 | + } |
| 313 | + |
| 314 | + private static String nv( String str ) |
| 315 | + { |
| 316 | + if ( str != null && !"".equals( str.trim() ) ) |
| 317 | + { |
| 318 | + return str; |
| 319 | + } |
| 320 | + return null; |
| 321 | + } |
| 322 | + |
278 | 323 | private void generateP2RepositoryMetadata( File p2RepositoryDirectory ) |
279 | 324 | { |
280 | 325 | List<String> contentArgs = new ArrayList<String>(); |
@@ -632,7 +677,7 @@ private DiscoveryCatalog loadDiscoveryCatalog() |
632 | 677 | InputStream is = new FileInputStream( catalogFile ); |
633 | 678 | try |
634 | 679 | { |
635 | | - return new DiscoveryCatalogModelXpp3Reader().read( is ); |
| 680 | + return new DiscoveryCatalogModelXpp3ReaderEx().read( is, true ); |
636 | 681 | } |
637 | 682 | finally |
638 | 683 | { |
|
0 commit comments